home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / gemfsc18.lzh / AESSRC18.LZH / AESUTIL.S / RCADJUST.S < prev    next >
Text File  |  1992-03-16  |  2KB  |  54 lines

  1. ;*************************************************************************
  2. ;* RCADJUST.S - Adjust a VRECT or GRECT rectangle to a new size.
  3. ;*************************************************************************
  4.  
  5. _rc_gadjust::
  6.  
  7.           moveq.l   #1,d2               ; Set GRECT-flag.
  8.           bra.s     adjust              ; Continue below.
  9.           
  10. _rc_vadjust::
  11.  
  12.           moveq.l   #0,d2               ; Clear GRECT-flag.
  13.  
  14. adjust:                                 ; Common code...
  15.  
  16.           .cargs    #4,.prect.l,.hadj,.vadj
  17.           
  18.           move.l    .prect(sp),a0       ; Get rectangle pointer.
  19.           move.l    a0,a1               ; save for return value
  20.           move.w    .hadj(sp),d0        ; Get x-axis adjustment.
  21.           move.w    .vadj(sp),d1        ; Get y-axis adjustment.
  22.  
  23.           sub.w     d0,(a0)             ; Adjust g_x (or v_x1).
  24.           bpl.s     .notneg1            ; If adjusted value is negative,
  25.           clr.w     (a0)                ; force it back to zero.
  26. .notneg1:
  27.           addq.l    #2,a0
  28.           sub.w     d1,(a0)             ; Adjust g_y (or v_y1).
  29.           bpl.s     .notneg2            ; If adjusted value is negative,
  30.           clr.w     (a0)                ; force it back to zero.
  31. .notneg2:
  32.           addq.l    #2,a0
  33.           
  34.           tst.w     d2                  ; Test GRECT flag.
  35.           beq.s     .no_double          ; Skip doubling if VRECT.
  36.  
  37.           add.w     d0,d0               ; For GRECTs we have to double the
  38.           add.w     d1,d1               ; adjustment to width & height.
  39. .no_double:
  40.           add.w     d0,(a0)             ; Adjust g_w (or v_x2).
  41.           bgt.s     .notneg3            ; If adjusted value is <= 0,
  42.           move.w    #1,(a0)             ; force it back to one.
  43. .notneg3:
  44.           addq.l    #2,a0
  45.           add.w     d1,(a0)             ; Adjust g_h (or v_y2).
  46.           bgt.s     .notneg4            ; If adjusted value is <= 0,
  47.           move.w   #1,(a0)              ; force it back to one.
  48. .notneg4:
  49.           move.l    a1,d0               ; return prect
  50.           rts                           ; Return.
  51.                 
  52. ;         end of code
  53.  
  54.